//
//  TableShowImagesConfig.swift
//  CooperSwift_Example
//
//  Created by 计海峰 on 2021/10/13.
//  Copyright © 2021 CocoaPods. All rights reserved.
//

import UIKit
import Kingfisher

public struct TableShowImagesConfig {
    
    public var imagesControls: [TableShowImageConfig]!
    public var cellHeight: CGFloat = 0.0
    public var isDelay = false
    public var currentIdx = 0
    public var width: CGFloat!
    public var columns: Int!
    
    public init( _ imagesControls: [TableShowImageConfig], maxWidth width: CGFloat = Screen.width, numerOfColumn columns: Int = 0) {
        self.imagesControls = imagesControls
        self.width = width
        self.columns = columns
        
//        self.imagesControls.append(contentsOf: imagesControls)
        
        var currentNumerOfColumn = 0 /// 当前行已有数量
        var leftCons: CGFloat = 0.0 /// 左侧边距
        var topMaxCons: CGFloat = 0.0 /// 顶部距离 最大 的那个
        var heightMaxCons: CGFloat = 0.0 /// 本行最高的按钮
        var floorHeightCons: CGFloat = 0.0 /// 上一层高度
        for (idx, config) in self.imagesControls.enumerated() {
            leftCons += config.vLeftCons
            var frame = CGRect(leftCons, floorHeightCons + config.vTopCons, config.vWidthCons, config.vHeightCons)
        /// config.frame = frame
            topMaxCons = max(topMaxCons, config.vTopCons)
            heightMaxCons = max(config.vHeightCons , heightMaxCons) /// 最高的img
            var needNextLine = (leftCons + config.vWidthCons + config.vLeftCons) - 1 > width && idx > 0  /// 这一行排列不下 并且不是第一个 需要换行
            if (self.columns > 0 && currentNumerOfColumn > 0 && currentNumerOfColumn >= self.columns) { /// 超过指定行的数量控制
                needNextLine = true
            }
            if (needNextLine) { /// 需要更换到下一行
                currentNumerOfColumn = 0 /// 换行  当前行 数量 归0
                leftCons = config.vLeftCons ///  换行  左侧边距
                floorHeightCons = floorHeightCons + topMaxCons + heightMaxCons  ///  换行  顶部高度刷新<上次顶部高度+之前最大顶部边距+最大高度>
                frame = CGRect(leftCons, floorHeightCons + config.vTopCons, config.vWidthCons, config.vHeightCons) /// 换行 修改frame
                topMaxCons = config.vTopCons ///  换行  修改新的一行的 最大顶部距离 <新的一行 第一个>
                heightMaxCons = config.vHeightCons ///  换行  修改新的一行的 最最大高度 <新的一行 第一个>
            }
            currentNumerOfColumn = currentNumerOfColumn + 1 /// 当前行 数量+1
            leftCons = leftCons + config.vWidthCons /// 左侧距离修改 加上当前控件宽度
            self.imagesControls[idx].frame = frame /// 更新按钮 frame
            if (idx == imagesControls.count - 1) { /// 最后一个控件
                /// 最后一个判断cell的高度刷新
                /// 最后一行 正好换行了
                let contentHeight = topMaxCons == 0 ? (config.vHeightCons + config.vTopCons) : (topMaxCons + heightMaxCons)
                /// 上次顶部高度  +  最后一行 + 底部距离
                let ideaCellHeight = floorHeightCons + contentHeight + (config.vBottomCons )
                self.cellHeight = ideaCellHeight;
            }
        }
    }
    
}
